package online.niuma.xiaocubao.service;

import online.niuma.xiaocubao.pojo.params.LoginParam;
import online.niuma.xiaocubao.pojo.vo.LoginUserVo;
import online.niuma.xiaocubao.pojo.vo.Result;

/**
 * @author 一颗蛋50斤
 * IntelliJ IDEA
 */
public interface LoginService {

    /**
     * 登陆业务
     * @param loginParam 登陆参数
     * @return 登陆信息
     */
    Result login(LoginParam loginParam);

    /**
     * 验证 token 的真实性
     * @param token 请求中携带的 token 值
     * @return 用户登陆的信息
     */
    LoginUserVo checkToken(String token);

    /**
     * 对用户注册的信息查重
     * 对账号进行查重
     * 对邮箱进行查重
     * 创建验证码，将验证码发送到用户注册的邮箱当中
     * 将验证码存入redis设置五分钟有效时间
     * @param account 用户注册账号
     * @param email 用户注册邮箱
     * @return 验证结果
     */
    Result checkSignUp(String account, String email);

    /**
     * 注册功能
     * todo 验证验证码，插入数据
     * 从 redis 中验证用户的验证码
     * 如果验证码不对则放回验证码错误
     * 如果验证码不存在则放回验证码已过期
     * 如果验证码验证成功，则将数据存入数据库中
     * @param account 账号
     * @param password 密码
     * @param email 邮箱
     * @param verificationCode 验证码
     * @return 注册信息
     */
    Result signUp(String account, String password, String email, String verificationCode);

    /**
     * 退出登陆
     * 判断 redis 中的 token 是否存在
     * 如果存在则将其删除，如果不存在则直接放回
     * @param token 用户请求中携带的 token
     * @return 退出成功
     */
    Result logout(String token);
}
